package com.ge.advanced.pool;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class DruidTest {

    @Test
    public void hardCodeDruid() throws SQLException {

        // 创建DruidDataSource连接池对象
        DruidDataSource dataSource = new DruidDataSource();

        // 设置必要的配置信息
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");

        // 设置非必要的配置信息，如初始连接数、最大连接数等
        dataSource.setInitialSize(10);
        dataSource.setMaxActive(20);

        // 获取数据库连接
        DruidPooledConnection connection = dataSource.getConnection();

        // 基于Connection对象进行数据库操作

        // 使用后回收连接，此处的回收是将连接放回池中，而不是关闭连接
        connection.close();
    }

    @Test
    public void softCodeDruid() throws Exception {

        // 创建Properties，用于存储外部配置文件
        Properties properties = new Properties();

        // 使用输入流读取外部配置文件
        // 通过类加载器读取资源文件
        InputStream inputStream = DruidTest.class.getClassLoader()
                .getResourceAsStream("db.properties");
        properties.load(inputStream);

        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        // 基于Properties构建DruidDataSource
        Connection connection = dataSource.getConnection();

        // 编写业务SQL操作

        // 回收连接
        connection.close();
    }
}
